This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

library(dplyr)

##### HIGH FAT DIET RAT  #47 SAMPLES, 4 SIG GENES
hf_nor_2PCR
##### HIGH FAT DIET RAT #23 SAMPLES
high_fat
##### NORMAL DIET RAT # 24 SAMPLES
normal_diet
#####HUMAN # 24 SAMPLES - ALL GENES
hpcr_nor
#####RAT #  48 SAMPLES - ALL GENES - HIGH FAT & NORMAL DIET - FOLD CHANGE NON NORM
hf_2PCR
############################
### AUTOMATIC
fx_z <- function(gene) {
  gene_std <- (gene - (mean(gene))/(sd(gene)))
  return(gene_std)
}
############################
####MANUAL INPUT
fx_z2 <- function(gene,mean,sd) {
  gene_std <- (gene - (mean)/(sd))
  return(gene_std)
}
############################
#mean(hf_2PCR$CERKL)
#sd(hf_2PCR$CERKL)
############################
#mean(hf_2PCR$FA2H)
#sd(hf_2PCR$FA2H)
#############################
shapiro.test(fx_z(hf_2PCR$CERKL))

    Shapiro-Wilk normality test

data:  fx_z(hf_2PCR$CERKL)
W = 0.90197, p-value = 0.000833
shapiro.test(fx_z(hf_2PCR$FA2H))

    Shapiro-Wilk normality test

data:  fx_z(hf_2PCR$FA2H)
W = 0.98597, p-value = 0.838
#hf_nor_2PCR = ALL RAT // NON NORMALIZED
library(dplyr)
ALLRAT <- select(hf_nor_2PCR, -SPECIES, -CHRNA10, -SMYD1)
NUM <- ALLRAT[,4:5]
AR_1 <- fx_z(NUM$CERKL)
AR_2 <- fx_z(NUM$FA2H)
LAB <- ALLRAT[,1:3]
ALLRAT_2 <- data.frame(LAB,AR_1,AR_2)
#hf_2PCR
NORMALDIET <- ALLRAT_2[1:24,2:5]
HF_DIET <- ALLRAT_2[25:47,2:5]
shapiro.test(AR_2)

    Shapiro-Wilk normality test

data:  AR_2
W = 0.96974, p-value = 0.2589
shapiro.test(AR_1)

    Shapiro-Wilk normality test

data:  AR_1
W = 0.94885, p-value = 0.03903
names(ALLRAT_2)[4] <- 'CERKL'
names(ALLRAT_2)[5] <- 'FA2H'
names(NORMALDIET)[4] <- 'FA2H'
names(NORMALDIET)[3] <- 'CERKL'
names(HF_DIET)[4] <- 'FA2H'
names(HF_DIET)[3] <- 'CERKL'
hf_2PCR
NORMAL <- ALLRAT_2[1:24,]
HIGH_FAT <- ALLRAT_2[24:47,]
ALLRAT_2
ALLRAT_2
NORMALDIET
HF_DIET
xx<- lm(ALLRAT_2$FA2H~ALLRAT_2$DX*ALLRAT_2$DIET)
anova(xx)
Analysis of Variance Table

Response: ALLRAT_2$FA2H
                          Df  Sum Sq Mean Sq F value    Pr(>F)    
ALLRAT_2$DX                1 0.00004 0.00004  0.0020 0.9649019    
ALLRAT_2$DIET              1 0.33311 0.33311 18.3584 0.0001011 ***
ALLRAT_2$DX:ALLRAT_2$DIET  1 0.08340 0.08340  4.5964 0.0377349 *  
Residuals                 43 0.78023 0.01814                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
shapiro.test(NORMALDIET$CERKL)

    Shapiro-Wilk normality test

data:  NORMALDIET$CERKL
W = 0.9222, p-value = 0.06533
shapiro.test(NORMALDIET$FA2H)

    Shapiro-Wilk normality test

data:  NORMALDIET$FA2H
W = 0.97432, p-value = 0.773
shapiro.test(HF_DIET$CERKL)

    Shapiro-Wilk normality test

data:  HF_DIET$CERKL
W = 0.98217, p-value = 0.9396
shapiro.test(HF_DIET$FA2H)

    Shapiro-Wilk normality test

data:  HF_DIET$FA2H
W = 0.97328, p-value = 0.7668
#library(heatmaply)
#heatmaply(NORMALDIET, main="Rat - Normal Diet", xlab="Genes", ylab="Subjects", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = #c(FALSE, FALSE), hide_colorbar=FALSE, dpi=600)
#heatmaply(HF_DIET, main="Rat - High Fat Diet", xlab="Genes", ylab="Subjects", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = #c(FALSE, FALSE), hide_colorbar=FALSE, dpi=600)
par(mfrow = c(2, 2))

# HUMAN FA2H
#interaction.plot(hpcr_nor$DX,hpcr_nor$SEX,hpcr_nor$FA2H, xlab="DX", ylab="FA2H", main="Human",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0 , col = c("pink", "blue") , #lwd=2.0,xpd = F , trace.label = "SEX", dpi=300)
#legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))

# HUMAN CERKL
#interaction.plot(hpcr_nor$DX,hpcr_nor$SEX,hpcr_nor$CERKL, xlab="DX",  ylab="CERKL", main="Human",  lty=c(1), ylim = c(-1.5,1.5),cex.axis = 0.8, legend=0 ,  col = c("pink", "blue"), #lwd=2.0, pch=c(1,1) ,xpd = F, trace.label = "SEX", dpi=300)
#legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))

# ALLRAT_2 DIET CERKL
interaction.plot(ALLRAT_2$DX, ALLRAT_2$DIET, ALLRAT_2$CERKL, xlab="DX", ylab="CERKL", main="Rat - All Diet",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 ,legend=0 , col = c("DARK GREEN", "blue") , xpd = F ,lwd=2.0, trace.label = "DIET", dpi=300)
legend("topright", lwd=2.0, legend = c("HF","ND"), lty=c(1), col =  c("DARK  GREEN", "blue"))


#lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , col = c("pink", "blue") , lwd=2.0,xpd = F , trace.label = "DIET", dpi=300)
# ALLRAT_2 DIET FA2H
interaction.plot(ALLRAT_2$DX, ALLRAT_2$DIET, ALLRAT_2$FA2H, xlab="DX", ylab="FA2H", main="Rat - All Diet",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0 ,col = c("DARK  GREEN", "blue") ,xpd = F , lwd=2.0, trace.label = "DIET", dpi=300)
legend("topright", lwd=2.0, legend = c("HF","ND"), lty=c(1), col = c("DARK  GREEN", "blue"))


##interaction.plot(ALLRAT_2$DX, ALLRAT_2$DIET, ALLRAT_2$FA2H, xlab="DX", ylab="FA2H", main="Rat - All Diet",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0 , col = c("pink", "blue") , ##lwd=2.0,xpd = F , trace.label = "DIET", dpi=300)
##legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))
##interaction.plot(ALLRAT_2$DX, ALLRAT_2$DIET, ALLRAT_2$CERKL, xlab="DX", ylab="FA2H", main="Rat - All Diet",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0 , col = c("pink", "blue") , ##lwd=2.0,xpd = F , trace.label = "DIET", dpi=300)
#legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))
# HIGH FAT FA2H



interaction.plot(high_fat$DX, high_fat$SEX, high_fat$FA2H, xlab="DX", ylab="FA2H", main="Rat - High Fat",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0, col = c("pink", "blue") , lwd=2.0,xpd = F , trace.label = "SEX", dpi=300)
legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))


# HIGH FAT CERKL
interaction.plot(high_fat$DX, high_fat$SEX, high_fat$CERKL, xlab="DX", ylab="CERKL", main="Rat - High Fat",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0, col = c("pink", "blue") , lwd=2.0,xpd = F , trace.label = "SEX", dpi=300)
legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))

# HIGH FAT FA2H
#interaction.plot(HF_DIET$DX, HF_DIET$SEX, HF_DIET$FA2H, xlab="DX", ylab="FA2H", main="Rat - High Fat",  l\ty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0, col = c("pink", "blue") , lwd=2.0,xpd = F , trace.label = "SEX", dpi=300)
#legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))

# HIGH FAT CERKL
#interaction.plot(HF_DIET$DX, HF_DIET$SEX, HF_DIET$CERKL, xlab="DX", ylab="CERKL", main="Rat - High Fat",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0, col = c("pink", "blue") , lwd=2.0,xpd = F , trace.label = "SEX", dpi=300)
legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))

# NORMAL DIET CERKL
interaction.plot(normal_diet$DX, normal_diet$SEX, normal_diet$CERKL, xlab="DX", ylab="CERKL", main="Rat - Normal Diet",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0 , col = c("pink", "blue") , lwd=2.0,xpd = F , trace.label = "SEX", dpi=300)
legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))


#interaction.plot(normal_diet_non$DX, normal_diet_non$SEX, normal_diet_non$CERKL, xlab="DX", ylab="CERKL", main="Rat - Normal Diet",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = #0.8 , legend=0 , col = c("pink", "blue") , lwd=2.0,xpd = F , trace.label = "SEX", dpi=300)
#legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))


# NORMAL DIET FA2H
interaction.plot(normal_diet$DX, normal_diet$SEX, normal_diet$FA2H, xlab="DX", ylab="FA2H", main="Rat - Normal Diet",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0 , col = c("pink", "blue") , lwd=2.0,xpd = F , trace.label = "SEX",dpi=300)
legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))


# NORMAL DIET CERKL
#interaction.plot(NORMALDIET$DX, NORMALDIET$SEX, NORMALDIET$CERKL, xlab="DX", ylab="CERKL", main="Rat - Normal Diet",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0 , col = c("pink", "blue") , lwd=2.0,xpd = F , trace.label = "SEX", dpi=300)
#legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))

# NORMAL DIET FA2H
#interaction.plot(NORMALDIET$DX, NORMALDIET$SEX, NORMALDIET$FA2H, xlab="DX", ylab="FA2H", main="Rat - Normal Diet",  lty=c(1), ylim = c(-1.5,1.5), cex.axis = 0.8 , legend=0 , col = c("pink", "blue") , lwd=2.0,xpd = F , trace.label = "SEX", dpi=300)
#legend("topright", lwd=2.0, legend = c("F","M"), lty=c(1), col = c("pink", "blue"))
       
#hf_nor_2PCR = ALL RAT // NON NORMALIZED
library(dplyr)
ALLRAT <- select(hf_nor_2PCR, -SPECIES, -CHRNA10, -SMYD1)
NUM <- ALLRAT[,4:5]
AR_1 <- fx_z(NUM$CERKL)
AR_2 <- fx_z(NUM$FA2H)
LAB <- ALLRAT[,1:3]
ALLRAT_2 <- data.frame(LAB,AR_1,AR_2)
#hf_2PCR

shapiro.test(AR_2)

    Shapiro-Wilk normality test

data:  AR_2
W = 0.96974, p-value = 0.2589
library(heatmaply)
Loading required package: plotly
Loading required package: ggplot2
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout

Loading required package: viridis
Loading required package: viridisLite

======================
Welcome to heatmaply version 1.3.0

Type citation('heatmaply') for how to cite the package.
Type ?heatmaply for the main documentation.

The github page is: https://github.com/talgalili/heatmaply/
Please submit your suggestions and bug-reports at: https://github.com/talgalili/heatmaply/issues
You may ask questions at stackoverflow, use the r and heatmaply tags: 
     https://stackoverflow.com/questions/tagged/heatmaply
======================
heatmaply(ALLRAT_2, main="Human", xlab="Genes", ylab="Subjects", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = c(FALSE, FALSE), hide_colorbar=FALSE, dpi=600)
unable to load shared object '/Library/Frameworks/R.framework/Resources/modules//R_X11.so':
  dlopen(/Library/Frameworks/R.framework/Resources/modules//R_X11.so, 6): Library not loaded: /opt/X11/lib/libSM.6.dylib
  Referenced from: /Library/Frameworks/R.framework/Resources/modules//R_X11.so
  Reason: image not found
hf_2PCR_1 <-  select(hf_2PCR, -SPECIES, -X., -CHRNA10, -SMYD1)
LAB <-hf_2PCR_1[,1:3]
DAT<-hf_2PCR_1[,4:5]
DAT2 <- fx(DAT)
dietframe <- data.frame(LAB, DAT2)

dietframe

shapiro.test(dietframe$CERKL)

    Shapiro-Wilk normality test

data:  dietframe$CERKL
W = 0.94885, p-value = 0.03903
shapiro.test(dietframe$FA2H)

    Shapiro-Wilk normality test

data:  dietframe$FA2H
W = 0.96974, p-value = 0.2589
heatmaply(ALLRAT, main="Human", xlab="Genes", ylab="Subjects", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = c(FALSE, FALSE), hide_colorbar=TRUE, dpi=600)
#library(dplyr)
#high_fat
#shapiro.test(high_fat$CERKL)
#shapiro.test(high_fat$FA2H)
#hfat <- select(high_fat, -DIET, -CHRNA10, -SMYD1)
#hfat <- select(high_fat, -SPECIES, -CHRNA10, -SMYD1)
#hfat
#NORMALDIET
#heatmaply(HF_DIET, main="Rat - High Fat", xlab="Genes", ylab="Subjects", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = c(FALSE, FALSE), hide_colorbar=TRUE, dpi=600)


normal_diet
shapiro.test(normal_diet$CERKL)

    Shapiro-Wilk normality test

data:  normal_diet$CERKL
W = 0.9222, p-value = 0.06533
shapiro.test(normal_diet$FA2H)

    Shapiro-Wilk normality test

data:  normal_diet$FA2H
W = 0.97432, p-value = 0.773
hfat <- select(high_fat, -DIET, -CHRNA10, -SMYD1)
nfat<-select(normal_diet, -DIET, -CHRNA10, -SMYD1)
             
#hfat <- select(high_fat, -SPECIES, -CHRNA10, -SMYD1)
#hfat
#heatmaply(hfat, main="Rat - High Fat", xlab="Genes", ylab="Subjects", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, #show_dendrogram = c(FALSE, FALSE), hide_colorbar=TRUE, dpi=600)
#heatmaply(nfat, main="Rat - High Fat", xlab="Genes", ylab="Subjects", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, #show_dendrogram = c(FALSE, FALSE), hide_colorbar=TRUE, dpi=600)
NORMALDIET

HF_DIET
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(heatmaply)
hpcrnor <- select(hpcr_nor, -SPECIES, -CHRNA10, -SMYD1, -CLIC4, -COL4A1, -FAM189A1, -PTGDR, -SDCCAG8, -TF)
Error in select(hpcr_nor, -SPECIES, -CHRNA10, -SMYD1, -CLIC4, -COL4A1,  : 
  object 'hpcr_nor' not found
library(heatmaply)
Loading required package: plotly
Loading required package: ggplot2
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout

Loading required package: viridis
Loading required package: viridisLite

======================
Welcome to heatmaply version 1.3.0

Type citation('heatmaply') for how to cite the package.
Type ?heatmaply for the main documentation.

The github page is: https://github.com/talgalili/heatmaply/
Please submit your suggestions and bug-reports at: https://github.com/talgalili/heatmaply/issues
You may ask questions at stackoverflow, use the r and heatmaply tags: 
     https://stackoverflow.com/questions/tagged/heatmaply
======================
heatmaply(hpcrnor, main="Human",  xlab="Genes", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = c(FALSE, FALSE), showticklabels = c(T,F), hide_colorbar=FALSE, dpi=300, file = "Human.pdf") #"SWBB/TTUHSC-Files/Outgoing Tissue_SWBB/Laura O-Dell-UTEP/Publication/FINAL FIGURES/NICOTINE FIGURES R STUDIO/Human.pdf")
Error in heatmaply(hpcrnor, main = "Human", xlab = "Genes", col = c("black",  : 
  object 'hpcrnor' not found
#D:/R STUDIO/    === /Volumes/F4L SWBB/
#webshot::install_phantomjs ()
#library(heatmaply)
#heatmaply(hfat, main="Rat - High Fat",  xlab="Genes", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = #c(FALSE, FALSE), showticklabels = c(T,F), hide_colorbar=FALSE, dpi=300, file = "D:/R STUDIO/NICOTINE PAPER/CSV NICOTINE/Rat - High Fat.pdf")
#heatmaply(nfat, main="Rat - Normal Diet",  xlab="Genes", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = c(FALSE, FALSE), showticklabels = c(T,F), hide_colorbar=FALSE, dpi=300, file = "D:/R STUDIO/NICOTINE PAPER/CSV NICOTINE/Rat - Normal Diet.pdf")
#heatmaply(hfat, main="Rat - High Fat",  xlab="Genes", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = c(FALSE, FALSE), showticklabels = c(T,F), hide_colorbar=TRUE, dpi=300, file = "D:/R STUDIO/NICOTINE PAPER/CSV NICOTINE/Rat - High Fat 2.pdf")
#heatmaply(nfat, main="Rat - Normal Diet",  xlab="Genes", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = c(FALSE, FALSE), showticklabels = c(T,F), hide_colorbar=TRUE, dpi=300, file = "D:/R STUDIO/NICOTINE PAPER/CSV NICOTINE/Rat - Normal Diet 2.pdf")
#heatmaply(nfat, main="Rat - Normal Diet",  xlab="Genes", col=c("black","red"), row_side_palette= mfcol, labRow = NULL, show_dendrogram = c(FALSE, FALSE), showticklabels = c(T,F), hide_colorbar=TRUE, dpi=300, file = "D:/R STUDIO/NICOTINE PAPER/CSV NICOTINE/Rat - Normal Diet 2.pdf")
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIAoKYGBge3J9CmxpYnJhcnkoZHBseXIpCgojIyMjIyBISUdIIEZBVCBESUVUIFJBVCAgIzQ3IFNBTVBMRVMsIDQgU0lHIEdFTkVTCmhmX25vcl8yUENSCiMjIyMjIEhJR0ggRkFUIERJRVQgUkFUICMyMyBTQU1QTEVTCmhpZ2hfZmF0CiMjIyMjIE5PUk1BTCBESUVUIFJBVCAjIDI0IFNBTVBMRVMKbm9ybWFsX2RpZXQKIyMjIyNIVU1BTiAjIDI0IFNBTVBMRVMgLSBBTEwgR0VORVMKaHBjcl9ub3IKIyMjIyNSQVQgIyAgNDggU0FNUExFUyAtIEFMTCBHRU5FUyAtIEhJR0ggRkFUICYgTk9STUFMIERJRVQgLSBGT0xEIENIQU5HRSBOT04gTk9STQpoZl8yUENSCmBgYAoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIEFVVE9NQVRJQwpmeF96IDwtIGZ1bmN0aW9uKGdlbmUpIHsKICBnZW5lX3N0ZCA8LSAoZ2VuZSAtIChtZWFuKGdlbmUpKS8oc2QoZ2VuZSkpKQogIHJldHVybihnZW5lX3N0ZCkKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyNNQU5VQUwgSU5QVVQKZnhfejIgPC0gZnVuY3Rpb24oZ2VuZSxtZWFuLHNkKSB7CiAgZ2VuZV9zdGQgPC0gKGdlbmUgLSAobWVhbikvKHNkKSkKICByZXR1cm4oZ2VuZV9zdGQpCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojbWVhbihoZl8yUENSJENFUktMKQojc2QoaGZfMlBDUiRDRVJLTCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojbWVhbihoZl8yUENSJEZBMkgpCiNzZChoZl8yUENSJEZBMkgpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnNoYXBpcm8udGVzdChmeF96KGhmXzJQQ1IkQ0VSS0wpKQpzaGFwaXJvLnRlc3QoZnhfeihoZl8yUENSJEZBMkgpKQoKYGBgCgoKCgoKYGBge3J9CgpgYGAKCgpgYGB7cn0KCmBgYAoKCmBgYHtyfQojaGZfbm9yXzJQQ1IgPSBBTEwgUkFUIC8vIE5PTiBOT1JNQUxJWkVECmxpYnJhcnkoZHBseXIpCkFMTFJBVCA8LSBzZWxlY3QoaGZfbm9yXzJQQ1IsIC1TUEVDSUVTLCAtQ0hSTkExMCwgLVNNWUQxKQpOVU0gPC0gQUxMUkFUWyw0OjVdCkFSXzEgPC0gZnhfeihOVU0kQ0VSS0wpCkFSXzIgPC0gZnhfeihOVU0kRkEySCkKTEFCIDwtIEFMTFJBVFssMTozXQpBTExSQVRfMiA8LSBkYXRhLmZyYW1lKExBQixBUl8xLEFSXzIpCiNoZl8yUENSCk5PUk1BTERJRVQgPC0gQUxMUkFUXzJbMToyNCwyOjVdCkhGX0RJRVQgPC0gQUxMUkFUXzJbMjU6NDcsMjo1XQpzaGFwaXJvLnRlc3QoQVJfMikKc2hhcGlyby50ZXN0KEFSXzEpCm5hbWVzKEFMTFJBVF8yKVs0XSA8LSAnQ0VSS0wnCm5hbWVzKEFMTFJBVF8yKVs1XSA8LSAnRkEySCcKbmFtZXMoTk9STUFMRElFVClbNF0gPC0gJ0ZBMkgnCm5hbWVzKE5PUk1BTERJRVQpWzNdIDwtICdDRVJLTCcKbmFtZXMoSEZfRElFVClbNF0gPC0gJ0ZBMkgnCm5hbWVzKEhGX0RJRVQpWzNdIDwtICdDRVJLTCcKaGZfMlBDUgpOT1JNQUwgPC0gQUxMUkFUXzJbMToyNCxdCkhJR0hfRkFUIDwtIEFMTFJBVF8yWzI0OjQ3LF0KQUxMUkFUXzIKYGBgCgpgYGB7cn0KQUxMUkFUXzIKTk9STUFMRElFVApIRl9ESUVUCmBgYAoKCmBgYHtyfQp4eDwtIGxtKEFMTFJBVF8yJEZBMkh+QUxMUkFUXzIkRFgqQUxMUkFUXzIkRElFVCkKYW5vdmEoeHgpCmBgYAoKCmBgYHtyfQpzaGFwaXJvLnRlc3QoTk9STUFMRElFVCRDRVJLTCkKc2hhcGlyby50ZXN0KE5PUk1BTERJRVQkRkEySCkKc2hhcGlyby50ZXN0KEhGX0RJRVQkQ0VSS0wpCnNoYXBpcm8udGVzdChIRl9ESUVUJEZBMkgpCmBgYAoKCmBgYHtyfQojbGlicmFyeShoZWF0bWFwbHkpCiNoZWF0bWFwbHkoTk9STUFMRElFVCwgbWFpbj0iUmF0IC0gTm9ybWFsIERpZXQiLCB4bGFiPSJHZW5lcyIsIHlsYWI9IlN1YmplY3RzIiwgY29sPWMoImJsYWNrIiwicmVkIiksIHJvd19zaWRlX3BhbGV0dGU9IG1mY29sLCBsYWJSb3cgPSBOVUxMLCBzaG93X2RlbmRyb2dyYW0gPSAjYyhGQUxTRSwgRkFMU0UpLCBoaWRlX2NvbG9yYmFyPUZBTFNFLCBkcGk9NjAwKQojaGVhdG1hcGx5KEhGX0RJRVQsIG1haW49IlJhdCAtIEhpZ2ggRmF0IERpZXQiLCB4bGFiPSJHZW5lcyIsIHlsYWI9IlN1YmplY3RzIiwgY29sPWMoImJsYWNrIiwicmVkIiksIHJvd19zaWRlX3BhbGV0dGU9IG1mY29sLCBsYWJSb3cgPSBOVUxMLCBzaG93X2RlbmRyb2dyYW0gPSAjYyhGQUxTRSwgRkFMU0UpLCBoaWRlX2NvbG9yYmFyPUZBTFNFLCBkcGk9NjAwKQpgYGAKCgpgYGB7cn0KcGFyKG1mcm93ID0gYygyLCAyKSkKCiMgSFVNQU4gRkEySAojaW50ZXJhY3Rpb24ucGxvdChocGNyX25vciREWCxocGNyX25vciRTRVgsaHBjcl9ub3IkRkEySCwgeGxhYj0iRFgiLCB5bGFiPSJGQTJIIiwgbWFpbj0iSHVtYW4iLCAgbHR5PWMoMSksIHlsaW0gPSBjKC0xLjUsMS41KSwgY2V4LmF4aXMgPSAwLjggLCBsZWdlbmQ9MCAsIGNvbCA9IGMoInBpbmsiLCAiYmx1ZSIpICwgI2x3ZD0yLjAseHBkID0gRiAsIHRyYWNlLmxhYmVsID0gIlNFWCIsIGRwaT0zMDApCiNsZWdlbmQoInRvcHJpZ2h0IiwgbHdkPTIuMCwgbGVnZW5kID0gYygiRiIsIk0iKSwgbHR5PWMoMSksIGNvbCA9IGMoInBpbmsiLCAiYmx1ZSIpKQoKIyBIVU1BTiBDRVJLTAojaW50ZXJhY3Rpb24ucGxvdChocGNyX25vciREWCxocGNyX25vciRTRVgsaHBjcl9ub3IkQ0VSS0wsIHhsYWI9IkRYIiwgIHlsYWI9IkNFUktMIiwgbWFpbj0iSHVtYW4iLCAgbHR5PWMoMSksIHlsaW0gPSBjKC0xLjUsMS41KSxjZXguYXhpcyA9IDAuOCwgbGVnZW5kPTAgLCAgY29sID0gYygicGluayIsICJibHVlIiksICNsd2Q9Mi4wLCBwY2g9YygxLDEpICx4cGQgPSBGLCB0cmFjZS5sYWJlbCA9ICJTRVgiLCBkcGk9MzAwKQojbGVnZW5kKCJ0b3ByaWdodCIsIGx3ZD0yLjAsIGxlZ2VuZCA9IGMoIkYiLCJNIiksIGx0eT1jKDEpLCBjb2wgPSBjKCJwaW5rIiwgImJsdWUiKSkKCiMgQUxMUkFUXzIgRElFVCBDRVJLTAppbnRlcmFjdGlvbi5wbG90KEFMTFJBVF8yJERYLCBBTExSQVRfMiRESUVULCBBTExSQVRfMiRDRVJLTCwgeGxhYj0iRFgiLCB5bGFiPSJDRVJLTCIsIG1haW49IlJhdCAtIEFsbCBEaWV0IiwgIGx0eT1jKDEpLCB5bGltID0gYygtMS41LDEuNSksIGNleC5heGlzID0gMC44ICxsZWdlbmQ9MCAsIGNvbCA9IGMoIkRBUksgR1JFRU4iLCAiYmx1ZSIpICwgeHBkID0gRiAsbHdkPTIuMCwgdHJhY2UubGFiZWwgPSAiRElFVCIsIGRwaT0zMDApCmxlZ2VuZCgidG9wcmlnaHQiLCBsd2Q9Mi4wLCBsZWdlbmQgPSBjKCJIRiIsIk5EIiksIGx0eT1jKDEpLCBjb2wgPSAgYygiREFSSyAgR1JFRU4iLCAiYmx1ZSIpKQoKCiNsdHk9YygxKSwgeWxpbSA9IGMoLTEuNSwxLjUpLCBjZXguYXhpcyA9IDAuOCAsIGNvbCA9IGMoInBpbmsiLCAiYmx1ZSIpICwgbHdkPTIuMCx4cGQgPSBGICwgdHJhY2UubGFiZWwgPSAiRElFVCIsIGRwaT0zMDApCiMgQUxMUkFUXzIgRElFVCBGQTJICmludGVyYWN0aW9uLnBsb3QoQUxMUkFUXzIkRFgsIEFMTFJBVF8yJERJRVQsIEFMTFJBVF8yJEZBMkgsIHhsYWI9IkRYIiwgeWxhYj0iRkEySCIsIG1haW49IlJhdCAtIEFsbCBEaWV0IiwgIGx0eT1jKDEpLCB5bGltID0gYygtMS41LDEuNSksIGNleC5heGlzID0gMC44ICwgbGVnZW5kPTAgLGNvbCA9IGMoIkRBUksgIEdSRUVOIiwgImJsdWUiKSAseHBkID0gRiAsIGx3ZD0yLjAsIHRyYWNlLmxhYmVsID0gIkRJRVQiLCBkcGk9MzAwKQpsZWdlbmQoInRvcHJpZ2h0IiwgbHdkPTIuMCwgbGVnZW5kID0gYygiSEYiLCJORCIpLCBsdHk9YygxKSwgY29sID0gYygiREFSSyAgR1JFRU4iLCAiYmx1ZSIpKQoKIyNpbnRlcmFjdGlvbi5wbG90KEFMTFJBVF8yJERYLCBBTExSQVRfMiRESUVULCBBTExSQVRfMiRGQTJILCB4bGFiPSJEWCIsIHlsYWI9IkZBMkgiLCBtYWluPSJSYXQgLSBBbGwgRGlldCIsICBsdHk9YygxKSwgeWxpbSA9IGMoLTEuNSwxLjUpLCBjZXguYXhpcyA9IDAuOCAsIGxlZ2VuZD0wICwgY29sID0gYygicGluayIsICJibHVlIikgLCAjI2x3ZD0yLjAseHBkID0gRiAsIHRyYWNlLmxhYmVsID0gIkRJRVQiLCBkcGk9MzAwKQojI2xlZ2VuZCgidG9wcmlnaHQiLCBsd2Q9Mi4wLCBsZWdlbmQgPSBjKCJGIiwiTSIpLCBsdHk9YygxKSwgY29sID0gYygicGluayIsICJibHVlIikpCiMjaW50ZXJhY3Rpb24ucGxvdChBTExSQVRfMiREWCwgQUxMUkFUXzIkRElFVCwgQUxMUkFUXzIkQ0VSS0wsIHhsYWI9IkRYIiwgeWxhYj0iRkEySCIsIG1haW49IlJhdCAtIEFsbCBEaWV0IiwgIGx0eT1jKDEpLCB5bGltID0gYygtMS41LDEuNSksIGNleC5heGlzID0gMC44ICwgbGVnZW5kPTAgLCBjb2wgPSBjKCJwaW5rIiwgImJsdWUiKSAsICMjbHdkPTIuMCx4cGQgPSBGICwgdHJhY2UubGFiZWwgPSAiRElFVCIsIGRwaT0zMDApCiNsZWdlbmQoInRvcHJpZ2h0IiwgbHdkPTIuMCwgbGVnZW5kID0gYygiRiIsIk0iKSwgbHR5PWMoMSksIGNvbCA9IGMoInBpbmsiLCAiYmx1ZSIpKQoKCmBgYAoKCmBgYHtyfQojIEhJR0ggRkFUIEZBMkgKCgoKaW50ZXJhY3Rpb24ucGxvdChoaWdoX2ZhdCREWCwgaGlnaF9mYXQkU0VYLCBoaWdoX2ZhdCRGQTJILCB4bGFiPSJEWCIsIHlsYWI9IkZBMkgiLCBtYWluPSJSYXQgLSBIaWdoIEZhdCIsICBsdHk9YygxKSwgeWxpbSA9IGMoLTEuNSwxLjUpLCBjZXguYXhpcyA9IDAuOCAsIGxlZ2VuZD0wLCBjb2wgPSBjKCJwaW5rIiwgImJsdWUiKSAsIGx3ZD0yLjAseHBkID0gRiAsIHRyYWNlLmxhYmVsID0gIlNFWCIsIGRwaT0zMDApCmxlZ2VuZCgidG9wcmlnaHQiLCBsd2Q9Mi4wLCBsZWdlbmQgPSBjKCJGIiwiTSIpLCBsdHk9YygxKSwgY29sID0gYygicGluayIsICJibHVlIikpCgojIEhJR0ggRkFUIENFUktMCmludGVyYWN0aW9uLnBsb3QoaGlnaF9mYXQkRFgsIGhpZ2hfZmF0JFNFWCwgaGlnaF9mYXQkQ0VSS0wsIHhsYWI9IkRYIiwgeWxhYj0iQ0VSS0wiLCBtYWluPSJSYXQgLSBIaWdoIEZhdCIsICBsdHk9YygxKSwgeWxpbSA9IGMoLTEuNSwxLjUpLCBjZXguYXhpcyA9IDAuOCAsIGxlZ2VuZD0wLCBjb2wgPSBjKCJwaW5rIiwgImJsdWUiKSAsIGx3ZD0yLjAseHBkID0gRiAsIHRyYWNlLmxhYmVsID0gIlNFWCIsIGRwaT0zMDApCmxlZ2VuZCgidG9wcmlnaHQiLCBsd2Q9Mi4wLCBsZWdlbmQgPSBjKCJGIiwiTSIpLCBsdHk9YygxKSwgY29sID0gYygicGluayIsICJibHVlIikpCgojIEhJR0ggRkFUIEZBMkgKI2ludGVyYWN0aW9uLnBsb3QoSEZfRElFVCREWCwgSEZfRElFVCRTRVgsIEhGX0RJRVQkRkEySCwgeGxhYj0iRFgiLCB5bGFiPSJGQTJIIiwgbWFpbj0iUmF0IC0gSGlnaCBGYXQiLCAgbFx0eT1jKDEpLCB5bGltID0gYygtMS41LDEuNSksIGNleC5heGlzID0gMC44ICwgbGVnZW5kPTAsIGNvbCA9IGMoInBpbmsiLCAiYmx1ZSIpICwgbHdkPTIuMCx4cGQgPSBGICwgdHJhY2UubGFiZWwgPSAiU0VYIiwgZHBpPTMwMCkKI2xlZ2VuZCgidG9wcmlnaHQiLCBsd2Q9Mi4wLCBsZWdlbmQgPSBjKCJGIiwiTSIpLCBsdHk9YygxKSwgY29sID0gYygicGluayIsICJibHVlIikpCgojIEhJR0ggRkFUIENFUktMCiNpbnRlcmFjdGlvbi5wbG90KEhGX0RJRVQkRFgsIEhGX0RJRVQkU0VYLCBIRl9ESUVUJENFUktMLCB4bGFiPSJEWCIsIHlsYWI9IkNFUktMIiwgbWFpbj0iUmF0IC0gSGlnaCBGYXQiLCAgbHR5PWMoMSksIHlsaW0gPSBjKC0xLjUsMS41KSwgY2V4LmF4aXMgPSAwLjggLCBsZWdlbmQ9MCwgY29sID0gYygicGluayIsICJibHVlIikgLCBsd2Q9Mi4wLHhwZCA9IEYgLCB0cmFjZS5sYWJlbCA9ICJTRVgiLCBkcGk9MzAwKQpsZWdlbmQoInRvcHJpZ2h0IiwgbHdkPTIuMCwgbGVnZW5kID0gYygiRiIsIk0iKSwgbHR5PWMoMSksIGNvbCA9IGMoInBpbmsiLCAiYmx1ZSIpKQpgYGAKCgpgYGB7cn0KIyBOT1JNQUwgRElFVCBDRVJLTAppbnRlcmFjdGlvbi5wbG90KG5vcm1hbF9kaWV0JERYLCBub3JtYWxfZGlldCRTRVgsIG5vcm1hbF9kaWV0JENFUktMLCB4bGFiPSJEWCIsIHlsYWI9IkNFUktMIiwgbWFpbj0iUmF0IC0gTm9ybWFsIERpZXQiLCAgbHR5PWMoMSksIHlsaW0gPSBjKC0xLjUsMS41KSwgY2V4LmF4aXMgPSAwLjggLCBsZWdlbmQ9MCAsIGNvbCA9IGMoInBpbmsiLCAiYmx1ZSIpICwgbHdkPTIuMCx4cGQgPSBGICwgdHJhY2UubGFiZWwgPSAiU0VYIiwgZHBpPTMwMCkKbGVnZW5kKCJ0b3ByaWdodCIsIGx3ZD0yLjAsIGxlZ2VuZCA9IGMoIkYiLCJNIiksIGx0eT1jKDEpLCBjb2wgPSBjKCJwaW5rIiwgImJsdWUiKSkKCiNpbnRlcmFjdGlvbi5wbG90KG5vcm1hbF9kaWV0X25vbiREWCwgbm9ybWFsX2RpZXRfbm9uJFNFWCwgbm9ybWFsX2RpZXRfbm9uJENFUktMLCB4bGFiPSJEWCIsIHlsYWI9IkNFUktMIiwgbWFpbj0iUmF0IC0gTm9ybWFsIERpZXQiLCAgbHR5PWMoMSksIHlsaW0gPSBjKC0xLjUsMS41KSwgY2V4LmF4aXMgPSAjMC44ICwgbGVnZW5kPTAgLCBjb2wgPSBjKCJwaW5rIiwgImJsdWUiKSAsIGx3ZD0yLjAseHBkID0gRiAsIHRyYWNlLmxhYmVsID0gIlNFWCIsIGRwaT0zMDApCiNsZWdlbmQoInRvcHJpZ2h0IiwgbHdkPTIuMCwgbGVnZW5kID0gYygiRiIsIk0iKSwgbHR5PWMoMSksIGNvbCA9IGMoInBpbmsiLCAiYmx1ZSIpKQoKCiMgTk9STUFMIERJRVQgRkEySAppbnRlcmFjdGlvbi5wbG90KG5vcm1hbF9kaWV0JERYLCBub3JtYWxfZGlldCRTRVgsIG5vcm1hbF9kaWV0JEZBMkgsIHhsYWI9IkRYIiwgeWxhYj0iRkEySCIsIG1haW49IlJhdCAtIE5vcm1hbCBEaWV0IiwgIGx0eT1jKDEpLCB5bGltID0gYygtMS41LDEuNSksIGNleC5heGlzID0gMC44ICwgbGVnZW5kPTAgLCBjb2wgPSBjKCJwaW5rIiwgImJsdWUiKSAsIGx3ZD0yLjAseHBkID0gRiAsIHRyYWNlLmxhYmVsID0gIlNFWCIsZHBpPTMwMCkKbGVnZW5kKCJ0b3ByaWdodCIsIGx3ZD0yLjAsIGxlZ2VuZCA9IGMoIkYiLCJNIiksIGx0eT1jKDEpLCBjb2wgPSBjKCJwaW5rIiwgImJsdWUiKSkKCiMgTk9STUFMIERJRVQgQ0VSS0wKI2ludGVyYWN0aW9uLnBsb3QoTk9STUFMRElFVCREWCwgTk9STUFMRElFVCRTRVgsIE5PUk1BTERJRVQkQ0VSS0wsIHhsYWI9IkRYIiwgeWxhYj0iQ0VSS0wiLCBtYWluPSJSYXQgLSBOb3JtYWwgRGlldCIsICBsdHk9YygxKSwgeWxpbSA9IGMoLTEuNSwxLjUpLCBjZXguYXhpcyA9IDAuOCAsIGxlZ2VuZD0wICwgY29sID0gYygicGluayIsICJibHVlIikgLCBsd2Q9Mi4wLHhwZCA9IEYgLCB0cmFjZS5sYWJlbCA9ICJTRVgiLCBkcGk9MzAwKQojbGVnZW5kKCJ0b3ByaWdodCIsIGx3ZD0yLjAsIGxlZ2VuZCA9IGMoIkYiLCJNIiksIGx0eT1jKDEpLCBjb2wgPSBjKCJwaW5rIiwgImJsdWUiKSkKCiMgTk9STUFMIERJRVQgRkEySAojaW50ZXJhY3Rpb24ucGxvdChOT1JNQUxESUVUJERYLCBOT1JNQUxESUVUJFNFWCwgTk9STUFMRElFVCRGQTJILCB4bGFiPSJEWCIsIHlsYWI9IkZBMkgiLCBtYWluPSJSYXQgLSBOb3JtYWwgRGlldCIsICBsdHk9YygxKSwgeWxpbSA9IGMoLTEuNSwxLjUpLCBjZXguYXhpcyA9IDAuOCAsIGxlZ2VuZD0wICwgY29sID0gYygicGluayIsICJibHVlIikgLCBsd2Q9Mi4wLHhwZCA9IEYgLCB0cmFjZS5sYWJlbCA9ICJTRVgiLCBkcGk9MzAwKQojbGVnZW5kKCJ0b3ByaWdodCIsIGx3ZD0yLjAsIGxlZ2VuZCA9IGMoIkYiLCJNIiksIGx0eT1jKDEpLCBjb2wgPSBjKCJwaW5rIiwgImJsdWUiKSkKICAgICAgIAoKYGBgCgpgYGB7cn0KI2hmX25vcl8yUENSID0gQUxMIFJBVCAvLyBOT04gTk9STUFMSVpFRApsaWJyYXJ5KGRwbHlyKQpBTExSQVQgPC0gc2VsZWN0KGhmX25vcl8yUENSLCAtU1BFQ0lFUywgLUNIUk5BMTAsIC1TTVlEMSkKTlVNIDwtIEFMTFJBVFssNDo1XQpBUl8xIDwtIGZ4X3ooTlVNJENFUktMKQpBUl8yIDwtIGZ4X3ooTlVNJEZBMkgpCkxBQiA8LSBBTExSQVRbLDE6M10KQUxMUkFUXzIgPC0gZGF0YS5mcmFtZShMQUIsQVJfMSxBUl8yKQojaGZfMlBDUgoKc2hhcGlyby50ZXN0KEFSXzIpCgpsaWJyYXJ5KGhlYXRtYXBseSkKaGVhdG1hcGx5KEFMTFJBVF8yLCBtYWluPSJIdW1hbiIsIHhsYWI9IkdlbmVzIiwgeWxhYj0iU3ViamVjdHMiLCBjb2w9YygiYmxhY2siLCJyZWQiKSwgcm93X3NpZGVfcGFsZXR0ZT0gbWZjb2wsIGxhYlJvdyA9IE5VTEwsIHNob3dfZGVuZHJvZ3JhbSA9IGMoRkFMU0UsIEZBTFNFKSwgaGlkZV9jb2xvcmJhcj1GQUxTRSwgZHBpPTYwMCkKCmBgYAoKCmBgYHtyfQpoZl8yUENSXzEgPC0gIHNlbGVjdChoZl8yUENSLCAtU1BFQ0lFUywgLVguLCAtQ0hSTkExMCwgLVNNWUQxKQpMQUIgPC1oZl8yUENSXzFbLDE6M10KREFUPC1oZl8yUENSXzFbLDQ6NV0KREFUMiA8LSBmeChEQVQpCmRpZXRmcmFtZSA8LSBkYXRhLmZyYW1lKExBQiwgREFUMikKCmRpZXRmcmFtZQoKc2hhcGlyby50ZXN0KGRpZXRmcmFtZSRDRVJLTCkKc2hhcGlyby50ZXN0KGRpZXRmcmFtZSRGQTJIKQpgYGAKCgpgYGB7cn0KaGVhdG1hcGx5KEFMTFJBVCwgbWFpbj0iSHVtYW4iLCB4bGFiPSJHZW5lcyIsIHlsYWI9IlN1YmplY3RzIiwgY29sPWMoImJsYWNrIiwicmVkIiksIHJvd19zaWRlX3BhbGV0dGU9IG1mY29sLCBsYWJSb3cgPSBOVUxMLCBzaG93X2RlbmRyb2dyYW0gPSBjKEZBTFNFLCBGQUxTRSksIGhpZGVfY29sb3JiYXI9VFJVRSwgZHBpPTYwMCkKYGBgCgoKYGBge3J9CiNsaWJyYXJ5KGRwbHlyKQojaGlnaF9mYXQKI3NoYXBpcm8udGVzdChoaWdoX2ZhdCRDRVJLTCkKI3NoYXBpcm8udGVzdChoaWdoX2ZhdCRGQTJIKQojaGZhdCA8LSBzZWxlY3QoaGlnaF9mYXQsIC1ESUVULCAtQ0hSTkExMCwgLVNNWUQxKQojaGZhdCA8LSBzZWxlY3QoaGlnaF9mYXQsIC1TUEVDSUVTLCAtQ0hSTkExMCwgLVNNWUQxKQojaGZhdAojTk9STUFMRElFVAojaGVhdG1hcGx5KEhGX0RJRVQsIG1haW49IlJhdCAtIEhpZ2ggRmF0IiwgeGxhYj0iR2VuZXMiLCB5bGFiPSJTdWJqZWN0cyIsIGNvbD1jKCJibGFjayIsInJlZCIpLCByb3dfc2lkZV9wYWxldHRlPSBtZmNvbCwgbGFiUm93ID0gTlVMTCwgc2hvd19kZW5kcm9ncmFtID0gYyhGQUxTRSwgRkFMU0UpLCBoaWRlX2NvbG9yYmFyPVRSVUUsIGRwaT02MDApCmBgYAoKCmBgYHtyfQoKCm5vcm1hbF9kaWV0CnNoYXBpcm8udGVzdChub3JtYWxfZGlldCRDRVJLTCkKc2hhcGlyby50ZXN0KG5vcm1hbF9kaWV0JEZBMkgpCmhmYXQgPC0gc2VsZWN0KGhpZ2hfZmF0LCAtRElFVCwgLUNIUk5BMTAsIC1TTVlEMSkKbmZhdDwtc2VsZWN0KG5vcm1hbF9kaWV0LCAtRElFVCwgLUNIUk5BMTAsIC1TTVlEMSkKICAgICAgICAgICAgIAojaGZhdCA8LSBzZWxlY3QoaGlnaF9mYXQsIC1TUEVDSUVTLCAtQ0hSTkExMCwgLVNNWUQxKQojaGZhdAojaGVhdG1hcGx5KGhmYXQsIG1haW49IlJhdCAtIEhpZ2ggRmF0IiwgeGxhYj0iR2VuZXMiLCB5bGFiPSJTdWJqZWN0cyIsIGNvbD1jKCJibGFjayIsInJlZCIpLCByb3dfc2lkZV9wYWxldHRlPSBtZmNvbCwgbGFiUm93ID0gTlVMTCwgI3Nob3dfZGVuZHJvZ3JhbSA9IGMoRkFMU0UsIEZBTFNFKSwgaGlkZV9jb2xvcmJhcj1UUlVFLCBkcGk9NjAwKQojaGVhdG1hcGx5KG5mYXQsIG1haW49IlJhdCAtIEhpZ2ggRmF0IiwgeGxhYj0iR2VuZXMiLCB5bGFiPSJTdWJqZWN0cyIsIGNvbD1jKCJibGFjayIsInJlZCIpLCByb3dfc2lkZV9wYWxldHRlPSBtZmNvbCwgbGFiUm93ID0gTlVMTCwgI3Nob3dfZGVuZHJvZ3JhbSA9IGMoRkFMU0UsIEZBTFNFKSwgaGlkZV9jb2xvcmJhcj1UUlVFLCBkcGk9NjAwKQoKYGBgCgoKYGBge3J9Ck5PUk1BTERJRVQKCkhGX0RJRVQKYGBgCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGhlYXRtYXBseSkKaHBjcm5vciA8LSBzZWxlY3QoaHBjcl9ub3IsIC1TUEVDSUVTLCAtQ0hSTkExMCwgLVNNWUQxLCAtQ0xJQzQsIC1DT0w0QTEsIC1GQU0xODlBMSwgLVBUR0RSLCAtU0RDQ0FHOCwgLVRGKQpocGNybm9yCiNTOi9TV0JCL1RUVUhTQy1GaWxlcy9PdXRnb2luZyBUaXNzdWVfU1dCQi9MYXVyYSBPLURlbGwtVVRFUC9QdWJsaWNhdGlvbi9GSU5BTCBGSUdVUkVTL05JQ09USU5FIEZJR1VSRVMgUiBTVFVESU8KIyJFOi9SIFNUVURJTy9OSUNPVElORSBQQVBFUi9DU1YgTklDT1RJTkUvSHVtYW4ucGRmIikKYGBgCgoKYGBge3J9CmxpYnJhcnkoaGVhdG1hcGx5KQpoZWF0bWFwbHkoaHBjcm5vciwgbWFpbj0iSHVtYW4iLCAgeGxhYj0iR2VuZXMiLCBjb2w9YygiYmxhY2siLCJyZWQiKSwgcm93X3NpZGVfcGFsZXR0ZT0gbWZjb2wsIGxhYlJvdyA9IE5VTEwsIHNob3dfZGVuZHJvZ3JhbSA9IGMoRkFMU0UsIEZBTFNFKSwgc2hvd3RpY2tsYWJlbHMgPSBjKFQsRiksIGhpZGVfY29sb3JiYXI9RkFMU0UsIGRwaT0zMDAsIGZpbGUgPSAiSHVtYW4ucGRmIikgIyJTV0JCL1RUVUhTQy1GaWxlcy9PdXRnb2luZyBUaXNzdWVfU1dCQi9MYXVyYSBPLURlbGwtVVRFUC9QdWJsaWNhdGlvbi9GSU5BTCBGSUdVUkVTL05JQ09USU5FIEZJR1VSRVMgUiBTVFVESU8vSHVtYW4ucGRmIikKCiNoZWF0bWFwbHkoaHBjcm5vciwgbWFpbj0iSHVtYW4iLCAgeGxhYj0iR2VuZXMiLCBjb2w9YygiYmxhY2siLCJyZWQiKSwgcm93X3NpZGVfcGFsZXR0ZT0gbWZjb2wsIGxhYlJvdyA9IE5VTEwsIHNob3dfZGVuZHJvZ3JhbSA9IGMoRkFMU0UsIEZBTFNFKSwgc2hvd3RpY2tsYWJlbHMgPSBjKFQsRiksIGhpZGVfY29sb3JiYXI9VFJVRSwgZHBpPTMwMCwgZmlsZSA9ICJTOi9TV0JCL1RUVUhTQy1GaWxlcy9PdXRnb2luZyBUaXNzdWVfU1dCQi9MYXVyYSBPLURlbGwtVVRFUC9QdWJsaWNhdGlvbi9GSU5BTCBGSUdVUkVTL05JQ09USU5FIEZJR1VSRVMgUiBTVFVESU8vSHVtYW4gQ0IucGRmIikKYGBgCgoKCgpgYGB7cn0KI0Q6L1IgU1RVRElPLyAgICA9PT0gL1ZvbHVtZXMvRjRMIFNXQkIvCiN3ZWJzaG90OjppbnN0YWxsX3BoYW50b21qcyAoKQojbGlicmFyeShoZWF0bWFwbHkpCiNoZWF0bWFwbHkoaGZhdCwgbWFpbj0iUmF0IC0gSGlnaCBGYXQiLCAgeGxhYj0iR2VuZXMiLCBjb2w9YygiYmxhY2siLCJyZWQiKSwgcm93X3NpZGVfcGFsZXR0ZT0gbWZjb2wsIGxhYlJvdyA9IE5VTEwsIHNob3dfZGVuZHJvZ3JhbSA9ICNjKEZBTFNFLCBGQUxTRSksIHNob3d0aWNrbGFiZWxzID0gYyhULEYpLCBoaWRlX2NvbG9yYmFyPUZBTFNFLCBkcGk9MzAwLCBmaWxlID0gIkQ6L1IgU1RVRElPL05JQ09USU5FIFBBUEVSL0NTViBOSUNPVElORS9SYXQgLSBIaWdoIEZhdC5wZGYiKQojaGVhdG1hcGx5KG5mYXQsIG1haW49IlJhdCAtIE5vcm1hbCBEaWV0IiwgIHhsYWI9IkdlbmVzIiwgY29sPWMoImJsYWNrIiwicmVkIiksIHJvd19zaWRlX3BhbGV0dGU9IG1mY29sLCBsYWJSb3cgPSBOVUxMLCBzaG93X2RlbmRyb2dyYW0gPSBjKEZBTFNFLCBGQUxTRSksIHNob3d0aWNrbGFiZWxzID0gYyhULEYpLCBoaWRlX2NvbG9yYmFyPUZBTFNFLCBkcGk9MzAwLCBmaWxlID0gIkQ6L1IgU1RVRElPL05JQ09USU5FIFBBUEVSL0NTViBOSUNPVElORS9SYXQgLSBOb3JtYWwgRGlldC5wZGYiKQojaGVhdG1hcGx5KGhmYXQsIG1haW49IlJhdCAtIEhpZ2ggRmF0IiwgIHhsYWI9IkdlbmVzIiwgY29sPWMoImJsYWNrIiwicmVkIiksIHJvd19zaWRlX3BhbGV0dGU9IG1mY29sLCBsYWJSb3cgPSBOVUxMLCBzaG93X2RlbmRyb2dyYW0gPSBjKEZBTFNFLCBGQUxTRSksIHNob3d0aWNrbGFiZWxzID0gYyhULEYpLCBoaWRlX2NvbG9yYmFyPVRSVUUsIGRwaT0zMDAsIGZpbGUgPSAiRDovUiBTVFVESU8vTklDT1RJTkUgUEFQRVIvQ1NWIE5JQ09USU5FL1JhdCAtIEhpZ2ggRmF0IDIucGRmIikKI2hlYXRtYXBseShuZmF0LCBtYWluPSJSYXQgLSBOb3JtYWwgRGlldCIsICB4bGFiPSJHZW5lcyIsIGNvbD1jKCJibGFjayIsInJlZCIpLCByb3dfc2lkZV9wYWxldHRlPSBtZmNvbCwgbGFiUm93ID0gTlVMTCwgc2hvd19kZW5kcm9ncmFtID0gYyhGQUxTRSwgRkFMU0UpLCBzaG93dGlja2xhYmVscyA9IGMoVCxGKSwgaGlkZV9jb2xvcmJhcj1UUlVFLCBkcGk9MzAwLCBmaWxlID0gIkQ6L1IgU1RVRElPL05JQ09USU5FIFBBUEVSL0NTViBOSUNPVElORS9SYXQgLSBOb3JtYWwgRGlldCAyLnBkZiIpCiNoZWF0bWFwbHkobmZhdCwgbWFpbj0iUmF0IC0gTm9ybWFsIERpZXQiLCAgeGxhYj0iR2VuZXMiLCBjb2w9YygiYmxhY2siLCJyZWQiKSwgcm93X3NpZGVfcGFsZXR0ZT0gbWZjb2wsIGxhYlJvdyA9IE5VTEwsIHNob3dfZGVuZHJvZ3JhbSA9IGMoRkFMU0UsIEZBTFNFKSwgc2hvd3RpY2tsYWJlbHMgPSBjKFQsRiksIGhpZGVfY29sb3JiYXI9VFJVRSwgZHBpPTMwMCwgZmlsZSA9ICJEOi9SIFNUVURJTy9OSUNPVElORSBQQVBFUi9DU1YgTklDT1RJTkUvUmF0IC0gTm9ybWFsIERpZXQgMi5wZGYiKQoKYGBgCgo=